'''单独分析数据项的字段数量，补全没有没有数据项个数的数据，提供参考字段数量'''

import pandas as pd
from openpyxl import load_workbook
from openpyxl.utils.dataframe import dataframe_to_rows


def process_excel_sheet(input_file, output_sheet_name='处理后的数据'):
    """
    读取Excel文件的861 sheet，处理字段数为空的行，并添加参考字段数一列
    """
    try:
        # 读取861 sheet
        df = pd.read_excel(input_file, sheet_name='数据（861）')

        print(f"原始数据行数: {len(df)}")
        print(f"原始列名: {df.columns.tolist()}")

        # 添加参考字段数列
        df['参考字段数'] = None

        # 处理字段数为空的行
        for index, row in df.iterrows():
            # 检查字段数列是否为空（假设字段数列名为'字段数'）
            if pd.isna(row.get('字段数', None)):
                # 获取数据项内容
                data_item = row.get('数据项', '')
                if pd.notna(data_item) and isinstance(data_item, str):
                    # 统计顿号个数
                    comma_count = data_item.count('、')
                    # 顿号个数 + 1 作为字段数
                    field_count = comma_count + 1
                    df.at[index, '参考字段数'] = field_count
                    print(f"第{index + 1}行: 数据项='{data_item}' -> 顿号数={comma_count}, 参考字段数={field_count}")

        # 打开现有的Excel文件
        workbook = load_workbook(input_file)

        # 如果目标sheet已存在，则删除它
        if output_sheet_name in workbook.sheetnames:
            del workbook[output_sheet_name]

        # 创建新的sheet
        new_sheet = workbook.create_sheet(output_sheet_name)

        # 将处理后的数据写入新sheet
        for r_idx, row in enumerate(dataframe_to_rows(df, index=False, header=True), 1):
            for c_idx, value in enumerate(row, 1):
                new_sheet.cell(row=r_idx, column=c_idx, value=value)

        # 保存文件
        workbook.save(input_file)
        print(f"处理完成！结果已保存到 {input_file} 的 '{output_sheet_name}' sheet中")

        return df

    except Exception as e:
        print(f"处理过程中出现错误: {e}")
        return None


# 使用方法
if __name__ == "__main__":
    # 替换为你的Excel文件路径
    excel_file = "C:/Users/xingwenzheng/Desktop/用于导入的 历史报表模板-1016.xlsx"

    # 处理数据
    result_df = process_excel_sheet(excel_file)

    if result_df is not None:
        print("\n处理后的数据预览:")
        print(result_df[['数据项', '字段数', '参考字段数']].head())